基于C#车辆车牌识别源代码
1.无需注册登录,可购买前先与客服沟通,或付款成功后,联系客服获取源码。
2.购买的源码本站负责在客户电脑免费部署。
3.功能内源码如有bug,本站负责免费调试修改。
4.如需在源码基础上增加、修改、删减功能,本站收取变更服务费用,费用多少可与客户协商。
基于C#车辆车牌识别源代码,灰度均衡化、高斯滤波、sobel边缘检测、车牌定位、c灰度化、c二值化等对车牌号处理,最终提取车牌号,相应时间低于4秒。
int charBmpCount = this.TransformFiles(charSourceBath);
int provinceBmpCount = this.TransformFiles(provinceSourceBath);
int[] charMatch = new int[charBmpCount];//存储当前图片和资源库中图片比对后所得的像素不同的个数
int[] provinceMatch = new int[provinceBmpCount];
charFont = new Bitmap[charBmpCount];
provinceFont = new Bitmap[provinceBmpCount];//这两个数组存储的是资源库中的bitmap文件
//Console.WriteLine("一共有这么几个资源文件" + (charBmpCount + provinceBmpCount));
for (int i = 0; i < charBmpCount; i++)
{
charMatch[i] = 0;
}
for (int i = 0; i < provinceBmpCount; i++)
{
provinceMatch[i] = 0;
}
for (int i = 0; i < charBmpCount; i++)
{
charFont[i] = (Bitmap)Bitmap.FromFile(charString[i], false);//使用该文件中的嵌入颜色管理信息,从指定的文件创建m_Bitmap
} //charString存储的是路径
for (int i = 0; i < provinceBmpCount; i++)
{
provinceFont[i] = (Bitmap)Bitmap.FromFile(provinceString[i], false);//使用该文件中的嵌入颜色管理信息,从指定的文件创建m_Bitmap
}
int matchIndex = 0;//最终匹配索引
string[] digitalFont = new string[7];
unsafe
{
if (z_Bitmaptwo[0] != null)
{
BitmapData bmData = z_Bitmaptwo[0].LockBits(new Rectangle(0, 0, z_Bitmaptwo[0].Width, z_Bitmaptwo[0].Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan = bmData.Scan0;
// byte* p = (byte*)(void*)Scan;
int nOffset = stride - z_Bitmaptwo[0].Width * 3;
int nWidth = z_Bitmaptwo[0].Width;
int nHeight = z_Bitmaptwo[0].Height;
int lv, lc = 30;
for (int i = 0; i < provinceBmpCount; i++)
{
byte* p = (byte*)(void*)Scan;
BitmapData bmData1 = provinceFont[i].LockBits(new Rectangle(0, 0, provinceFont[i].Width, provinceFont[i].Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride1 = bmData1.Stride;
System.IntPtr Scan1 = bmData1.Scan0;
byte* p1 = (byte*)(void*)Scan1;
int nOffset1 = stride1 - provinceFont[i].Width * 3;
int nWidth1 = provinceFont[i].Width;
int nHeight1 = provinceFont[i].Height;
int ccc0 = 0, ccc1 = 0;
lv = 0;//两个图片匹配不相同的地方
for (int y = 0; y < nHeight; ++y)
{
for (int x = 0; x < nWidth; ++x)
{
if ((p[0] - p1[0]) != 0)
{
provinceMatch[i]++;
//Console.WriteLine(ccc0++);
}
//if (p[0] == 255)
//{ ccc0++; }
//if (p[1] == 255)
//{ ccc1++; }
p1 += 3;
p += 3;
}
p1 += nOffset;
p += nOffset;
}
//Console.WriteLine(provinceDigitalString[i] + "不相同的像素数值" + provinceMatch[i]);
//lv = lv + Math.Abs(ccc0 - ccc1);
matchIndex = this.minNumber(provinceMatch);
digitalFont[0] = provinceDigitalString[matchIndex].Substring(0,1);//文件的名字和图片信息匹配,所以得到的文件名就是图片上的文字
provinceFont[i].UnlockBits(bmData1);
}
z_Bitmaptwo[0].UnlockBits(bmData);
}
if (z_Bitmaptwo[1] != null && z_Bitmaptwo[2] != null && z_Bitmaptwo[3] != null && z_Bitmaptwo[4] != null && z_Bitmaptwo[5] != null && z_Bitmaptwo[6] != null)
{
for (int j = 1; j < 7; j++)
{
BitmapData bmData = z_Bitmaptwo[j].LockBits(new Rectangle(0, 0, z_Bitmaptwo[j].Width, z_Bitmaptwo[j].Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan = bmData.Scan0;
// byte* p = (byte*)(void*)Scan;
int nOffset = stride - z_Bitmaptwo[j].Width * 3;
int nWidth = z_Bitmaptwo[j].Width;
int nHeight = z_Bitmaptwo[j].Height;
int lv, lc = 0;
//Console.WriteLine("======================================" + j);
for (int i = 0; i < charBmpCount; i++)
{
charMatch[i] = 0;
}
for (int i = 0; i < charBmpCount; i++)
{
byte* p = (byte*)(void*)Scan;
BitmapData bmData1 = charFont[i].LockBits(new Rectangle(0, 0, charFont[i].Width, charFont[i].Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride1 = bmData1.Stride;
System.IntPtr Scan1 = bmData1.Scan0;
byte* p1 = (byte*)(void*)Scan1;
int nOffset1 = stride1 - charFont[i].Width * 3;
int nWidth1 = charFont[i].Width;
int nHeight1 = charFont[i].Height;
int ccc0 = 0, ccc1 = 0;
lv = 0;
for (int y = 0; y < nHeight; ++y)
{
for (int x = 0; x < nWidth; ++x)
{
if ((p[0] - p1[0]) != 0)
{
charMatch[i]++;
// Console.WriteLine(ccc0++);
}
lv++;
p1 += 3;
p += 3;
}
p1 += nOffset;
p += nOffset;
}
// Console.WriteLine("图像尺寸" + lv);
Console.WriteLine(charDigitalString[i] + "数字中不相同的像素数值" + charMatch[i]);
matchIndex = this.minNumber(charMatch);
digitalFont[j] = charDigitalString[matchIndex].Substring(0, 1);//截取文件名的第一个字符就行了
charFont[i].UnlockBits(bmData1);
}
z_Bitmaptwo[j].UnlockBits(bmData);
}
}